package com.heima.seckill.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.serializer.*;

/**
 * redis 配置类
 */
@Configuration
public class RedisConfig {
    @Bean("JsonRedisTemplate")
    public RedisTemplate<String ,Object> RedisTemplate(RedisConnectionFactory redisConnectionFactory){
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
         //key序列化
         redisTemplate. setKeySerializer(new StringRedisSerializer());
          //value序列化
         redisTemplate . setValueSerializer(new GenericJackson2JsonRedisSerializer()) ;
         //hash类型key序列化
         redisTemplate . setHashKeySerializer(new StringRedisSerializer());
         //hash.类型value序列化
         redisTemplate. setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        // 设置 连接 工厂
         redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
     }


    @Bean
    public DefaultRedisScript<Long> script() {
        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
        //lock. lua脚本位置和application.yml同级目录
        redisScript.setLocation(new ClassPathResource("stock.lua"));
        redisScript.setResultType(Long.class);
        return redisScript;
    }

}
